import os, sys
from mitsu_sahel import Sahel 

class Biomass(Sahel):
    '''
    Beute Klasse mit den Methoden veraenderten Methoden zuna und Abnahme und der
    vererbten Klasse Population
    '''
    def __init__(self, popDev, zunaRate, abnaRate, timeStep, timeRange):
        '''
        Konstruktor der Klasse Biomass
        '''
        Sahel.__init__(self, popDev, zunaRate, abnaRate, timeStep, timeRange)
            
    def zuna(self, popDev):
        '''
        Methode zur Berechnung des Zuwachses mit Kapazitaetsgrenze
        '''
        return popDev*self.zunaRate*self.timeStep
                
    def abna(self, popDev):
        '''
        Methode zur Berechnung der Verluste in Abhaengigkeit des Treffens mit der Bevoelkerung
        '''
        #popDev = popDev + self.treffen(bevPop)
        return popDev*self.abnaRate*self.timeStep

class Bevoelkerung(Sahel):
    '''
    Bevoelkerung Klasse mit der veraenderten Methode zuna und der vererbten Klasse Population
    '''
    def __init__(self, popDev, zunaRate, abnaRate, timeStep, timeRange):
        '''
        Konstruktor der Klasse Bevoelkerung
        '''
        Sahel.__init__(self, popDev, zunaRate, abnaRate, timeStep, timeRange)
    
    def zuna(self, popDev):
        '''
        Methode zur Berechnung der Geburten in Abhaengigkeit des Treffens mit der Beute
        '''
        #popDev = popDev + self.treffen(biomassPop)
        return popDev*self.zunaRate*self.timeStep

    def abna(self, popDev):
        '''
        Methode zur Berechnung der Verluste in Abhaengigkeit des Treffens mit der Bevoelkerung
        '''
        #popDev = popDev + self.treffen(bevPop)
        #return popDev*self.abnaRate*self.timeStep*self.treffen(biomassPop)
        return popDev*self.abnaRate*self.timeStep
    
class Bodenqualitaet(Sahel):
    '''
    Bodenqualitaet Klasse mit der veraenderten Methode zuna und der vererbten Klasse Population
    '''
    def __init__(self, popDev, zunaRate, abnaRate, timeStep, timeRange, treffen, capacity):
        '''
        Konstruktor der Klasse Bodenqualitaet
        '''
        Sahel.__init__(self, popDev, zunaRate, abnaRate, timeStep, timeRange)
        self.capacity = capacity
        self.treffen = treffen    
    def zuna(self, popDev):
        '''
        Methode zur Berechnung der Geburten in Abhaengigkeit des Treffens mit der Beute
        '''
        #popDev = popDev + self.treffen(biomassPop)
        return (self.capacity-popDev)*self.zunaRate*self.timeStep
        
    def abna(self, popDev):
        '''
        Methode zur Berechnung der Verluste in Abhaengigkeit des Treffens mit der Bevoelkerung
        '''
        #popDev = popDev + self.treffen(bevPop)
        return popDev*self.abnaRate*self.timeStep*self.treffen
        #return popDev*self.abnaRate*self.timeStep#*nahrungstreffen

    
    '''
    Methode treffen zur Berechung des Treffens zweier Stocks mit einer bestimmten Wahrscheinlichkeit
    '''
    
    def treffen(self, ziel):
        treffen =((sum(i*j for i,j in zip(self.popDev,ziel.popDev)))*1)#*self.timeStep
        print treffen
        return treffen
    
'''
nahrungstreffen = 0  #initiate a point for the two populations to meet

for i in range(1,100000):
    nahrungstreffen = Sahel.popDev[i]*bevoelkerung.pop
    biomass.PopDev()
    bevoelkerung.PopDev()
'''

'''
Festlegen der Startwerte
'''
print ">>>>>>> Startwert, zunaRate, abnaRate, timeStep, timeRange, (capacity)"
print "Startwerte Biomasse:"
biomassPop = Biomass(10,0.2,0.1,0.2,5)
print "     Biomass(10,1.1,0.1,1,10,60)"
print " "
print "Startwerte Bevoelkerung:"
print "     Bevoelkerung(5, 0.2,0.1,1,10)"
bevPop = Bevoelkerung(10, 0.2,0.1,0.2,5)
print " "
print "Startwerte Bodenqualitaet:"
print "     Bodenqualitaet(5, 0.2,0.1,1,10)"
bodenPop = Bodenqualitaet(30, 0.2,0.1,0.2,5,2,100)


'''
Aufruf der Simulation
'''
bevPopSim = bevPop.sahelSim()
biomassPopSim = biomassPop.sahelSim()
bodenPopSim = bodenPop.sahelSim()
print " "
print " "


'''
Ausgabe der Werte
'''
print "Ergebnisse der Bevoelkerungssimulation:"
print "="*40
bevPop.ausgabe()
print "="*80
print "Ergebnisse der Biomassensimulation:"
print "="*35
biomassPop.ausgabe()
print "="*80
print "Ergebnisse der Bodenqualitaetssimulation:"
print "="*35
bodenPop.ausgabe()

'''
Visualisierung der Werte
'''
#biomassPop.visualisierung(biomassPopSim)
#bevPop.visualisierung(bevPopSim)
        
